#include "recbox.h"
#include "ui_recbox.h"
#include "recboxitem.h"
#include <QJsonObject>


RecBox::RecBox(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RecBox),
    row(1),
    col(4)
{
    ui->setupUi(this);


}

RecBox::~RecBox()
{
    delete ui;
}

void RecBox::initRecBoxUi(QJsonArray data, int row)
{
    if(row == 2)
    {
        // 下面的列表框
        this->row = row;
        col = 8;
    }
    else
    {
        // 上面的列表框
        ui->recListDown->hide();
    }
    imageList = data;

    currentIndex = 0;
    count = imageList.size()/col;
    // 在RecBox控件中添加RecBoxItem
    createRecBoxItem();


}

void RecBox::createRecBoxItem() //向RecBox中添加RecBoxItem对象
{
    // 删除已有元素

    // 获取现有的元素
    QList<RecBoxItem*> recUpList = ui->recListUp->findChildren<RecBoxItem*>();
    for(auto& e : recUpList)
    {
        ui->recListUpHLayout->removeWidget(e);
        delete e;
    }

    QList<RecBoxItem*> recDownList = ui->recListDown->findChildren<RecBoxItem*>();
    for(auto& e : recDownList)
    {
        ui->recListDownHLayout->removeWidget(e);
        delete e;
    }

    // 创建RecBoxItem对象，向RecBox中添加
    // 变量index记录添加次数，当添加次数>=4时，需要将后续内容添加至下半部分页面中
    int index = 0;
    // 添加偏移量为currentIndex * col（当前组数 * 个数）
    for(int i = currentIndex * col; i < col + currentIndex * col;i++)
    {
        // 构建对象
        RecBoxItem* item = new RecBoxItem();
        // 设置图片与文本
        QJsonObject obj = imageList[i].toObject();      // imageList存储了提供给RecBoxItem的图片以及文本，取一个QJsonObject内容
        item->setRecText(obj.value("text").toString()); // 获取QJsonObject键值为text的文本内容，将该内容设置为RecBoxItem的文本
        item->setRecImage(obj.value("path").toString());// 获取QJsonObject键值为path的图片路径，将该内容设置为RecBoxItem的图片

        if(index >= col/2 && 2 == row)                          // 当row == 2且col == 8时，符合上述条件，将后四张图片显示在下半部分
        {
            ui->recListDownHLayout->addWidget(item);        // 将设置好的RecBoxItem对象添加进recListDownHLayout（推荐页面的下半部分）中
        }
        else                                                // 当 row == 2的前四张图片 或 row == 1 时都显示在上半部分
        {
            ui->recListUpHLayout->addWidget(item);          // 将设置好的RecBoxItem对象添加进recListUpHLayout（推荐页面的上半部分）中
        }
        index++;
    }
}








// 下一页的槽函数
void RecBox::on_btDown_clicked()
{
    // 点击显示下一组图片，若是最后一组则显示第0组
    currentIndex++;
    currentIndex %= count;
    createRecBoxItem();
}

// 上一页的槽函数
void RecBox::on_btUp_clicked()
{
    // 点击显示上一组图片，若是第0组则显示最后一组
    currentIndex--;
    if(currentIndex < 0)
        currentIndex = count - 1;

    createRecBoxItem();
}

